package com.hzspace.visibility;

/**
 * @Author: LiuHao
 * @Descirption:
 * @Date: 2019/6/14_15:57
 */
public class Visibility {

//    private static boolean flag;
    private volatile static boolean flag;

    //synchronized解决原子性 可见性
    //volatile只解决可见性

    //CAS ABA 版本号
    //线程封闭： final 不要共享变量
    //栈封闭：比如方法内部声明修改 不会溢出
    //ThreadLocal：线程绑定

    //不加volatile程序启动并不会结束,变量是从缓存里读的
    //加了volatile指定程序必须从内存里读，保证变量对所有线程可见，阻止指令重排序
    public static void main(String[] args) throws InterruptedException {
        new Thread(() -> {
            for(;;){
                if(flag == true){
                    System.out.println("flag == true! ");
                    System.exit(0);
                }
            }
        }).start();

        Thread.sleep(10);

        new Thread(()->{
            for(;;){
                flag = true;
            }
        }).start();
    }
}
